Java final 与 C++ const
全部标签 我正在维护一个包含Mutex类的库。我无法决定此类公开的lock()和unlock()函数是否应该是const。我在Web上查找了类似的代码,并且可以找到这两种实现。第一个实现,lock()和unlock()不是常量。这意味着在const函数中使用Mutex类的人应该付出额外的努力来调用Mutex的函数:classMutex{public:voidlock();voidunlock();};classFoo{public:voidgetBar(Bar&bar)const{m_mutex.lock();bar=m_bar;m_mutex.unlock();}private://Mutab
我想投这个:classBase{public:virtual~Base(){};};classDer:publicBase{};intmain(){constBase*base=newDer;Der*der=dynamic_cast(base);//Errorreturn0;}我该怎么办?我试着输入:constDer*der=dynamic_cast(base);维护常量,但这不起作用。 最佳答案 试试这个:constDer*der=dynamic_cast(base);dynamic_cast无法删除const限定符。您可以使用c
我对使用the的优点感到困惑bool_和bool_类型反对在模板元编程的上下文中简单地使用constbools。boost::mpl库显然更喜欢第一种方法,并定义了诸如and_、or_之类的辅助函数来帮助管理此类bool_。像if_这样的条件元函数“接受”一个bool_作为第一个(模板)参数,但在幕后“调用”一个if_c元函数,它期望一个(const)bool作为第一个(模板)参数。这个决定背后的论据是什么? 最佳答案 这是一个简短的例子,说明我如何不时地使用这些类型。这个例子是不可能的,使用constbool:voiddo_som
我收到以下错误...Operandtypesareincompatible("char"and"constchar*")...尝试执行if语句时。我假设我不了解输入值的存储方式,尽管我不确定是否可以将其转换为匹配类型?要重现的示例代码是:charuserInput_Text[3];if(userInput_Text[1]=="y"){//Dostuff.}我不确定是什么原因造成的。看起来一种类型是char而另一种是constchar指针,尽管我不确定是什么,作为引用,当我不使用数组时也会发生此错误)。非常感谢提示/反馈。 最佳答案
我正在编写的程序中出现了以下模式。我希望它不是太做作,但它设法改变了Fooconst方法中的对象Foo::Questionable()const,不使用任何const_cast或类似的。基本上,Foo存储对FooOwner的引用反之亦然,在Questionable(),Foo设法通过调用mutate_foo()在const方法中修改自身在它的主人身上。问题遵循代码。#include"stdafx.h"#includeusingnamespacestd;classFooOwner;classFoo{FooOwner&owner;intdata;public:Foo(FooOwner&ow
我希望能够将const数组参数传递给C++中的方法。我知道,当您将数组传递给方法时,它与将指针传递给数组的第一项相同,因此一种简单的方法是使用指针。voidmyMethod(int*constinTab)但是有一个数组有时会更好,例如你可以写下数组的大小。 最佳答案 您可以使用采用数组大小的模板:http://ideone.com/0QhratemplatevoidmyMethod(constint(&intArray)[N]){std::cout编辑:避免代码膨胀的一种可能方法是使用一个函数,该函数采用一个指针和一个完成实际工
const(指针、引用和成员函数)如何帮助C++中的线程安全? 最佳答案 任何不可变(即不可更改)的数据本质上都是线程安全的-多个线程并发读取相同的只读数据没有风险,因为它永远不会更改!在C++中将变量标记为const使其成为只读的,因此是线程安全的。 关于c++-线程安全和`const`,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/362260/
与std::map和std::hash_map不同,Qt中的相应版本不需要返回引用。如果我为相当庞大的类构建哈希,效率不是很低吗?编辑特别是因为有一个单独的方法value(),它可以按值返回它。 最佳答案 STL的常量下标运算符|容器可以返回一个常量引用,因为它们会拒绝使用容器中不存在的索引调用它。这种情况下的行为是未定义的。因此,作为明智的设计选择,std::map甚至不提供const下标运算符重载。QMap试图更加适应,提供一个const下标运算符重载作为语法糖,遇到不存在键的问题,再次尝试更加适应,并返回一个默认构造的值。如果
我有一个类成员myMember,它是一个myType指针。我想在声明为const的函数中分配此成员。我正在做如下:voidfunc()const{...const_cast(myMember)=newmyType();...}这样做在VC++中工作正常,但GCC会给出错误消息“左值需要作为赋值的左操作数”。使成员可变允许我简单地删除const_cast并分配值。但是,我不完全确定这会带来其他副作用。我可以在不必使成员可变的情况下分配我的成员吗?如何?使成员可变有任何副作用吗? 最佳答案 这种情况——封装的内部状态变化不会影响外部状态
问题:通过const引用而不是简单地通过值传递整数类型是否有好处。即。voidfoo(constint&n);//case#1对比voidfoo(intn);//case#2对于用户定义的类型,答案很明确,案例#1避免了不必要的复制,同时确保了对象的常量性。但是在上面的例子中,引用和整数(至少在我的系统上)是相同的大小,所以我无法想象函数调用需要多长时间(由于复制)。但是,我的问题确实与内联函数的编译器有关:对于非常小的内联函数,编译器是否必须在情况#2中复制整数?通过让编译器知道我们不会更改引用,它可以内联函数调用而无需不必要地复制整数吗?欢迎提出任何建议。